vtd: ats and queued invalidation cleanup
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 16 Jun 2009 12:41:17 +0000 (13:41 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 16 Jun 2009 12:41:17 +0000 (13:41 +0100)
Use iommu_qinval in place of qinval_enabled flag.  Use
ecap_queued_inval() for determining whether queued invalidation is
available on this vt-d engine or not.

Signed-off-by: Allen Kay <allen.m.kay@intel.com>
xen/drivers/passthrough/vtd/qinval.c
xen/drivers/passthrough/vtd/x86/ats.c

index 528b4d809eaf31de27338be5e23a2e1bbf65a21d..c4f542f8149a6c51892e8b5e87fa51e0ebd0db10 100644 (file)
@@ -29,8 +29,6 @@
 #include "vtd.h"
 #include "extern.h"
 
-int qinval_enabled;
-
 static void print_qi_regs(struct iommu *iommu)
 {
     u64 val;
@@ -465,7 +463,6 @@ int enable_qinval(struct iommu *iommu)
                   (sts & DMA_GSTS_QIES), sts);
     spin_unlock_irqrestore(&iommu->register_lock, flags);
 
-    qinval_enabled = 1;
     return 0;
 }
 
index 0afad61e4df1b4623a1e3b566e2fb299616a814d..8a180d370e177e185bab484c43cff9ee36cb77c2 100644 (file)
@@ -87,15 +87,13 @@ int ats_device(int seg, int bus, int devfn)
     struct pci_dev *pdev;
     int pos = 0;
 
-    if ( !ats_enabled )
-        return 0;
-
-    if ( !qinval_enabled )
+    if ( !ats_enabled || !iommu_qinval )
         return 0;
 
     pdev = pci_get_pdev(bus, devfn);
     drhd = acpi_find_matched_drhd_unit(pdev);
-    if ( !ecap_dev_iotlb(drhd->iommu->ecap) )
+    if ( !ecap_queued_inval(drhd->iommu->ecap) ||
+         !ecap_dev_iotlb(drhd->iommu->ecap) )
         return 0;
 
     if ( !acpi_find_matched_atsr_unit(bus, devfn) )